package movilmax.sia_corp.action;
import java.util.LinkedList;
import java.util.Map;
import utilidades.Cadena;
import movilmax.sia_corp.model.Usuario;
import movilmax.sia_corp.model.VentasW;
import apli.conectar.Conectar;
import basedatos.Resultado;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ReporteVentas extends ActionSupport {
	private static final long serialVersionUID = -4110769642377266732L;
    
	private LinkedList<VentasW> rpt_lista;
	private String tt_facturado;
	private String tt_saldo;

	private String mes;
	private String anno;
	private String fechai;
	private String fechaf;
	private String tipoc;
	private String contrato;
	private String vendedor;
	private String sucursal;
	
	@SuppressWarnings("rawtypes")
	public String consultar_wimax(){
	  try{
		rpt_lista=new LinkedList<VentasW>();
		Map session = ActionContext.getContext().getSession();
    	Usuario USUARIO = (Usuario) session.get("ses_usuario");
		if(USUARIO==null){
			this.addActionError("La sesion del usuario ha caducado" ); 
			return ERROR;
		}
		Conectar BASE=new Conectar();
		if(!BASE.getMsg().equals("SI")){
			this.addActionError("No hay conexion al servidor");
			return ERROR;
		}
    	String SQL="",c1="",c2="",c3="",c4="",c5="";
    	if( this.getFechai() !=null && this.getFechaf() !=null ){
    		if (!this.getFechai().equals("") && !this.getFechaf().equals("") ){
    			c1=" and F.fecha >='"+this.getFechai()+"' and F.fecha<='"+this.getFechaf()+"' ";
    		}
    	}else{
    		String intervalo_i="",intervalo_f="",anno_act=this.getAnno();
		        if (!getAnno().equals("TODOS") && !getAnno().equals("-1") ){  
		    	    intervalo_i="01/01/"+anno_act;
		        	intervalo_f="31/12/"+anno_act;
		        	c1=" and F.fecha >='"+intervalo_i+"' and F.fecha <='"+intervalo_f+"' ";
		        }   
	    		if (! getMes().equals("-1") ){
	    		    int op_mes=new Cadena().convertirInt(this.getMes() );
	    		    switch(op_mes){
	    		        case 1:
	    		        	intervalo_i="01/01/"+anno_act;
	    		        	intervalo_f="31/01/"+anno_act;
	    		        break;
	    		        case 2:
	    		        	intervalo_i="01/02/"+anno_act;
	    		        	intervalo_f="28/02/"+anno_act;
		    		    break;
	    		        case 3:
	    		        	intervalo_i="01/03/"+anno_act;
	    		        	intervalo_f="31/03/"+anno_act;
		    		    break;
		    		    case 4:
		    		    	intervalo_i="01/04/"+anno_act;
	    		        	intervalo_f="30/04/"+anno_act;	
			    		break;
		    		    case 5:
		    		    	intervalo_i="01/05/"+anno_act;
	    		        	intervalo_f="31/05/"+anno_act;
		    		    break;
		    		    case 6:
		    		    	intervalo_i="01/06/"+anno_act;
	    		        	intervalo_f="30/06/"+anno_act;	
			    		break;
		    		    case 7:
		    		    	intervalo_i="01/07/"+anno_act;
	    		        	intervalo_f="31/07/"+anno_act;	
			    		break;
			    		case 8:
			    			intervalo_i="01/08/"+anno_act;
	    		        	intervalo_f="31/08/"+anno_act;	
				        break;
			    		case 9:
			    			intervalo_i="01/09/"+anno_act;
	    		        	intervalo_f="30/09/"+anno_act;	
		    		    break;
		    		    case 10:
		    		    	intervalo_i="01/10/"+anno_act;
	    		        	intervalo_f="31/10/"+anno_act;
			    		break;
		    		    case 11:
		    		    	intervalo_i="01/11/"+anno_act;
	    		        	intervalo_f="30/11/"+anno_act;	
			    		break;
			    		case 12:
			    			intervalo_i="01/12/"+anno_act;
	    		        	intervalo_f="31/12/"+anno_act;	
				        break;
	    		    }
	    		    c1=" and F.fecha >='"+intervalo_i+"' and F.fecha <='"+intervalo_f+"' ";
	    	  }    
	    	 if (getAnno().equals("-1") && mes.equals("-1"))
		        c1=" ";
    	}
    	if(!this.getTipoc().equals("-1") ){
    		c2=" and C.tipo='"+ this.getTipoc() +"' ";
    	}
    	if(this.getContrato().length()>0  ){
    		c3=" and C.contrato='"+ this.getContrato()+"' ";
    	}
    	if(!this.getVendedor().equals("-1")  ){
    		c4=" and C.vendedor='"+ this.getVendedor() +"' ";
    	}
    	if(!this.getSucursal().equals("-1")){
    		c5=" and F.sucursal='"+ this.getSucursal() +"' ";
    	}
    	if(USUARIO.getPerfil().getCod().equals("4") ){//gerente
    		SQL="select T.nombres+' '+T.apellidos as cli,C.contrato,C.tipo,F.codigo,F.nro_factura,F.nro_control,CONVERT(varchar(30),F.fecha,103) as fecha,F.status, ROUND(F.tt_iva+F.tt_neto,2) as total,F.saldo,V.descripcion as vendedor,S.descripcion as sucursal,X.descripcion as des_status "+
    			"from clientes T,contratos C,facturas_wmx F,vendedores V,sucursales S,status_facturas X "+
    			"where T.codigo=C.cliente and  C.tipo in('POSTPAGO','PREPAGO','PYME' ) "+ 
    			"and C.contrato=F.contrato and F.sucursal=S.cod  and F.status=X.cod "+
    			"and F.tipo_doc='FAC' and F.tipo_ingreso='1' "+
    			"and C.vendedor=V.cod and V.tipo in('WIMAX','PYME','CORPORATIVO','TODOS' ) "+c1+c2+c3+c4+c5+
    			"Order by F.fecha_registro DESC,F.hora_registro DESC ";
    	}else if(USUARIO.getPerfil().getCod().equals("3") ){//supervisor
    		SQL="select T.nombres+' '+T.apellidos as cli,C.contrato,C.tipo,F.codigo,F.nro_factura,F.nro_control,CONVERT(varchar(30),F.fecha,103) as fecha,F.status, ROUND(F.tt_iva+F.tt_neto,2) as total,F.saldo,V.descripcion as vendedor,S.descripcion as sucursal,X.descripcion as des_status "+
        		"from clientes T,contratos C,facturas_wmx F,vendedores V,sucursales S,status_facturas X "+
        		"where T.codigo=C.cliente and  C.tipo in('POSTPAGO','PREPAGO','PYME' ) "+ 
        		"and C.contrato=F.contrato and F.sucursal=S.cod and F.status=X.cod "+c1+c2+c3+c4+c5+
        		"and F.tipo_doc='FAC' and F.tipo_ingreso='1' and F.sucursal='"+ USUARIO.getSucursal().getCod() +"' "+
        		"and C.vendedor=V.cod and V.tipo in('WIMAX','PYME','CORPORATIVO','TODOS' ) "+
        		"Order by F.fecha_registro DESC,F.hora_registro DESC ";
    	}else if(USUARIO.getPerfil().getCod().equals("2") ){ //usuario	
    		SQL="select T.nombres+' '+T.apellidos as cli,C.contrato,C.tipo,F.codigo,F.nro_factura,F.nro_control,CONVERT(varchar(30),F.fecha,103) as fecha,F.status, ROUND(F.tt_iva+F.tt_neto,2) as total,F.saldo,V.descripcion as vendedor,S.descripcion as sucursal,X.descripcion as des_status "+
            	"from clientes T,contratos C,facturas_wmx F,vendedores V,sucursales S,status_facturas X "+
            	"where T.codigo=C.cliente and  C.tipo in('POSTPAGO','PREPAGO','PYME' ) "+ 
            	"and C.contrato=F.contrato and F.sucursal=S.cod and F.status=X.cod "+c1+c2+c3+c4+c5+
            	"and F.tipo_doc='FAC' and F.tipo_ingreso='1' and C.vendedor='"+ USUARIO.getCod_vendedor() +"' "+
            	"and C.vendedor=V.cod  "+
            	"Order by F.fecha_registro DESC,F.hora_registro DESC ";
    	}else if(USUARIO.getPerfil().getCod().equals("1") || USUARIO.getPerfil().equals("5") || USUARIO.getPerfil().equals("6")  ){ //super usuarios...	
    	    SQL="select T.nombres+' '+T.apellidos as cli,C.contrato,C.tipo,F.codigo,F.nro_factura,F.nro_control,CONVERT(varchar(30),F.fecha,103) as fecha,F.status, ROUND(F.tt_iva+F.tt_neto,2) as total,F.saldo,V.descripcion as vendedor,S.descripcion as sucursal,X.descripcion as des_status "+
            	"from clientes T,contratos C,facturas_wmx F,vendedores V,sucursales S,status_facturas X "+
            	"where T.codigo=C.cliente and  C.tipo in('POSTPAGO','PREPAGO','PYME' ) "+ 
            	"and C.contrato=F.contrato and F.sucursal=S.cod and F.status=X.cod "+
            	"and F.tipo_doc='FAC' and F.tipo_ingreso='1' and C.vendedor=V.cod "+c1+c2+c3+c4+c5+
            	"Order by F.fecha_registro DESC,F.hora_registro DESC ";
    	}
    	this.addActionMessage(SQL);
		Resultado RCS=BASE.getBaseDatos().consultar(SQL);
		Cadena C=new Cadena();
		double sub_tt=0,sal_tt=0;
		boolean x=false;
		  if(RCS.RP){
			  do{ 
				  VentasW ITM=new VentasW();
				  ITM.setCod_factura(RCS.getCadena("codigo"));
				  ITM.setCliente(RCS.getCadena("cli"));
				  ITM.setContrato(RCS.getCadena("contrato"));
				  ITM.setFactura(RCS.getCadena("nro_factura"));
				  ITM.setControl(RCS.getCadena("nro_control"));
				  ITM.setFecha(RCS.getCadena("fecha"));
				  ITM.setVendedor(RCS.getCadena("vendedor"));
				  ITM.setSucursal(RCS.getCadena("sucursal"));
				  ITM.setStatus(RCS.getCadena("status"));
				  ITM.setDes_status(RCS.getCadena("des_status"));
				  ITM.setTotal(C.formatearNumero(RCS.getDoble("total")));
				  if(RCS.getDoble("saldo")==0 )
				     ITM.setSaldo("0,00");
				  else
					 ITM.setSaldo(C.formatearNumero(RCS.getDoble("saldo"))); 
				  if(!RCS.getCadena("status").equals("0")){
					  sub_tt+=RCS.getDoble("total");
					  sal_tt+=RCS.getDoble("saldo");
					  x=(x ? false: true);
					  if(x)
					    ITM.setStylo("tabla_fil_normal1");
					  else
						ITM.setStylo("tabla_fil_normal2");  
				  }else{
					  ITM.setStylo("tabla_fil_anulado");
				  }
				  rpt_lista.add(ITM);
			  }while(RCS.sigItem()); 
			 this.setTt_facturado(C.formatearNumero(sub_tt));
			 if(sal_tt==0)
			    this.setTt_saldo("0,00");
			 else
				this.setTt_saldo(C.formatearNumero(sal_tt) ); 
		  }
		  return SUCCESS;  
		}catch(Exception err){
			err.printStackTrace();
			this.addActionError("Error:"+ err.getMessage() );
			this.addActionError( err.getLocalizedMessage() );
			return ERROR;
		}
	}
	public String getTt_facturado() {
		return tt_facturado;
	}
	public void setTt_facturado(String tt_facturado) {
		this.tt_facturado = tt_facturado;
	}
	public String getTt_saldo() {
		return tt_saldo;
	}
	public void setTt_saldo(String tt_saldo) {
		this.tt_saldo = tt_saldo;
	}
	public LinkedList<VentasW> getRpt_lista() {
		return rpt_lista;
	}
	public void setRpt_lista(LinkedList<VentasW> rpt_lista) {
		this.rpt_lista = rpt_lista;
	}
	public String getVendedor() {
		return vendedor;
	}
	public void setVendedor(String vendedor) {
		this.vendedor = vendedor;
	}
	public String getMes() {
		return mes;
	}
	public void setMes(String mes) {
		this.mes = mes;
	}
	public String getAnno() {
		return anno;
	}
	public void setAnno(String anno) {
		this.anno = anno;
	}
	public String getFechai() {
		return fechai;
	}
	public void setFechai(String fechai) {
		this.fechai = fechai;
	}
	public String getFechaf() {
		return fechaf;
	}
	public void setFechaf(String fechaf) {
		this.fechaf = fechaf;
	}
	public String getTipoc() {
		return tipoc;
	}
	public void setTipoc(String tipoc) {
		this.tipoc = tipoc;
	}
	public String getContrato() {
		return contrato;
	}
	public void setContrato(String contrato) {
		this.contrato = contrato;
	}
	public String getSucursal() {
		return sucursal;
	}
	public void setSucursal(String sucursal) {
		this.sucursal = sucursal;
	}

	

	
	
	
	
}

